<?php 
/*-- Project Introduce --*/

/**
 * 控制器类 Login 
 *
 * @access public
 */
class JJ_ChangePassword 
	extends JCAT_Controller 
{

	/**
	 * 构造函数 
	 * 
	 * @access	public
	 * @param	$aParent	JCAT_IController	父控制器 
	 * @return	void
	 */
	public function JJ_ChangePassword(JJ_MainController $aParent)
	{
		// 调用父类构造函数
		$this->JCAT_Controller(__CLASS__,$aParent) ;
		
		// 初始化文档、视图、子控制器 
		$this->Initialize() ;
	}

	/**
	 * 初始化文档、视图、子控制器 
	 * 
	 * @access	protected
	 * @return	void
	 */
	protected function Initialize()
	{
		// 消息队列
		$aMessageQueue = new JCAT_MessageQueue() ;
		JCAT_MessageDispatcher::RegisterMessageQueue($aMessageQueue,JJ_Login::MSGTYPE_FAIL) ;

		// 消息输出对象
		$aMessageQueue->AddPrinter(new JCAT_MessageGtkDialogPrinter($aMessageQueue)) ;
		$this->SetMessageQueue($aMessageQueue) ;
	}

	
	/**
	 * 执行入口函数 
	 * 
	 * @access	public
	 * @param	$arrArg=array	array	参数 
	 * @return	bool
	 */
	public function MainRun(array $arrArg=array())
	{$arrArg ;

		$aView = new JJ_ChangePasswordDialog($this) ;
			
		while(1)
		{
			// 显示视图
			$nResponse = $aView->DoDialog() ;
			if( $nResponse===Gtk::RESPONSE_OK )
			{
				//
				$sPassword =  trim($aView->GetUICtrlExchangeData('EntPassword')) ;
				$sPasswordRepeat =  trim($aView->GetUICtrlExchangeData('EntPasswordRepeat')) ;
				
				// 检查密码
				if( empty($sPassword) )
				{
					JCAT_Gtk::MessageDialog(JCAT_Language::Sentence('没有填写密码')) ;
					continue ;
				}
				if($sPassword!==$sPasswordRepeat)
				{
					JCAT_Gtk::MessageDialog(JCAT_Language::Sentence('两次输入的密码不一致')) ;
					continue ;
				}
				
				$aController = $this->GetParentController() ;
				$aMainController = $aController->GetTopController() ;
				$aXMPPConn = $aMainController->GetXMPPConnect() ;
				
				// 发送 注册请求
				$aXMPPConn->set_handler("passwordchanged",$this,"OnSuccessed");
				$aXMPPConn->set_handler("passwordfailure",$this,"OnFailure");
				$aXMPPConn->change_password($sPassword) ;
			
				// 等待 操作结果
				$this->bLooping = true ;
				while($this->bLooping)
				{
					usleep(200000);
					$aXMPPConn->loop_execute_once() ;
				}
				
				// 成功返回
				if( $this->bSuccess )
				{
					return true ;
				}
				
				// 失败重来
				else 
				{
					continue ;
				}
			}
			else
			{
				// 退出
				break ;
			}
		}
		
		return false ;
	}
	
	/**
	 * Description
	 *
	 * @access	public
	 * @return	void
	 */
	public function OnSuccessed()
	{
		JCAT_Gtk::MessageDialog(JCAT_Language::Sentence('账号密码已经更改。')) ;
		
		$this->bLooping = false ;
		$this->bSuccess = true ;
	}
	/**
	 * Description
	 *
	 * @access	public
	 * @return	void
	 */
	public function OnFailure()
	{
		JCAT_Gtk::MessageDialog(JCAT_Language::Sentence('操作超时')) ;
		
		$this->bLooping = false ;
		$this->bSuccess = false ;
	}
	
	const MSGTYPE_FAIL = 'RegisterFail' ;
}

?>